#include<stdio.h>
#include <sys/mman.h>
#include<unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<string.h>
#include<sys/wait.h>



int main()
{
    /*打开文件*/
    int fd=open("./record.txt",O_RDWR);
    if(fd==-1)
    {
        perror("open error:");
        _exit(-1);
    }
    /*获取文件大小*/
    int length=lseek(fd,0,SEEK_END);
    /*创建共享存储映射*/
    char *addr=(char *)mmap(NULL,length, PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
    if(addr==MAP_FAILED)
    {
        perror("mmap error:");
        _exit(-1);

    }
    /*关闭文件*/
    close(fd);

    /*创建子进程*/
    pid_t pid=fork();
    if(pid<0)
    {

    }
    else if(pid==0)
    {
        /*子进程*/
        sleep(3);

        printf("child addr=%s\n",addr);

    }
    else
    {
        /*父进程*/
        const char *data="不忘初心&砥砺前行";
        /*往共享存储隐射写数据*/
        strcpy(addr,data);

        /*阻塞回收子进程*/
        wait(NULL);
        printf("recycle success\n");
    
    }




    return 0;
}